#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include <string>
#include <stdio.h>
using namespace std;

#include "adhoc.h"

PSP_MODULE_INFO("AdHoc-Test-App", 0, 1, 1);

#define printf pspDebugScreenPrintf

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
	sceKernelExitGame();
	return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
	int cbid;

	cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
	sceKernelRegisterExitCallback(cbid);

	sceKernelSleepThreadCB();

	return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
	int thid = 0;

	thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
	if(thid >= 0) {
		sceKernelStartThread(thid, 0, 0);
	}

	return thid;
}


int main() {
	pspDebugScreenInit();
	SetupCallbacks();

	printf("MFZ007\n");
	printf("Adhoc-Matching Test. No connection will be established\n");
	printf("\nInitiating Adhoc-Class and starting Matching\n");
	printf("\nPress O to cancel.\n\n");
	
	SceCtrlData pad;
	bool running = true;
	
	twAdhoc Adhoc;
	
	
	while(running)
	{
		sceCtrlReadBufferPositive(&pad, 1);
		
		if(pad.Buttons & PSP_CTRL_CIRCLE)
		{
			printf("\nCanceled, terminating matching.\n\n");
			Adhoc.~twAdhoc();
			running = false;
		}
	}
	
	printf("\nMatching Terminated. Exiting in 5 seconds.\n");

	
	sceKernelDelayThread(5000 * 1000);
	
	sceKernelExitGame();
	
	sceKernelSleepThread();

	return 0;
} 